package my.jwds.p1296;

import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;

public class IsPossibleDivide {

    public boolean isPossibleDivide(int[] nums, int k) {
        if (nums.length%k != 0)return false;
        if (k==1)return true;
        LinkedHashMap<Integer,Integer> map = new LinkedHashMap<>();
        Arrays.sort(nums);
        for (int num : nums) {
            map.put(num,map.getOrDefault(num,0)+1);
        }
        while(!map.isEmpty()){
            if (map.size() < k)return false;
            Iterator<Map.Entry<Integer,Integer>> head = map.entrySet().iterator();
            Map.Entry<Integer,Integer> start = head.next();
            head.remove();
            int minCount = start.getValue();
            Map.Entry<Integer,Integer> end = null;
            for (int i = 1; i < k; i++) {
                end = head.next();
                if (end.getValue() < minCount) {
                    return false;
                } else if (end.getValue() == minCount) {
                    head.remove();
                } else{
                    end.setValue(end.getValue() - minCount);
                }
            }
            if (start.getKey()+k-1 != end.getKey())return false;

        }
        return true;
    }
}
